home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / EDITORS / TWIN / !Twin / Source < prev    next >
Text File  |  1990-08-25  |  8KB  |  316 lines

  1. ; Launch Twin from the Desktop
  2. ;      © 1990 Joe Abley
  3.  
  4.  
  5. ; Version 1.00
  6. ; Last updated 7 May 1990
  7.  
  8.  
  9. r0              RN      0
  10. r1              RN      1
  11. r2              RN      2
  12. r3              RN      3
  13. r4              RN      4
  14. r5              RN      5
  15. r6              RN      6
  16. r7              RN      7
  17. sp              RN      12
  18. r13             RN      13
  19. lr              RN      14
  20. pc              RN      15
  21.  
  22.  
  23. TextFile        *       &FFF
  24.  
  25. X               *       &20000
  26. ErrorNumber     *       42
  27.  
  28. HalfWidth       *       4*16                    ; half the width of a menu
  29.  
  30.  
  31. ; Memory management
  32.  
  33. FreeMemory      *       &8600
  34.  
  35. Buffer          *       FreeMemory
  36. Indirected      *       FreeMemory+&400
  37. Stack           *       FreeMemory+&800
  38.  
  39.  
  40.  
  41.                 ORG     &8000
  42.  
  43. EntryPoint      LDR     sp, =Stack
  44.                 STMEA   sp!, {lr}
  45.  
  46.                 MOV     r0, #200
  47.                 LDR     r1, TaskWord
  48.                 ADR     r2, TaskName
  49.                 SWI     Wimp_Initialise
  50.                 STR     r0, TaskWord
  51.  
  52.                 SWI     Hourglass_On
  53.                 BL      InitTemplates
  54.                 BL      InitIconBar
  55.                 SWI     Hourglass_Off
  56.                 BL      PollLoop
  57.  
  58.                 LDR     r0, TaskHandle
  59.                 LDR     r1, TaskWord
  60.                 SWI     Wimp_CloseDown
  61.                 LDMEA   sp!, {pc}
  62.  
  63.  
  64. TaskWord        DCB     "TASK"
  65.  
  66. TaskName        DCB     "Twin", 0
  67.  
  68. TaskHandle      DCD     0
  69.  
  70.  
  71. ; --------------------------------------------------------------
  72.  
  73.  
  74. InitTemplates   STMEA   sp!, {lr}
  75.                 ADR     r1, TemplateName
  76.                 SWI     Wimp_OpenTemplate
  77.  
  78.                 ADRL    r1, Buffer
  79.                 ADRL    r2, Indirected
  80.                 ADD     r3, r2, #&400
  81.                 MOV     r4, #-1
  82.                 ADR     r5, WindowName
  83.                 MOV     r6, #0
  84.  
  85.                 SWI     Wimp_LoadTemplate
  86.  
  87.                 ADRL    r1, Buffer
  88.                 SWI     Wimp_CreateWindow
  89.                 STR     r0, WindowHandle
  90.  
  91.                 SWI     Wimp_CloseTemplate
  92.                 LDMEA   sp!, {pc}
  93.  
  94.  
  95. TemplateName    DCB     "<twin$dir>.Templates", 0
  96.                 ALIGN
  97.  
  98. WindowName      DCB     "info"
  99.                 DCD     0, 0, 0
  100.  
  101.  
  102. ; --------------------------------------------------------------
  103.  
  104.  
  105. InitIconBar     ADR     r1, IconBlock
  106.                 SWI     Wimp_CreateIcon
  107.                 STR     r0, IconHandle
  108.                 MOV     pc, lr
  109.  
  110. IconHandle      DCD     0
  111.  
  112. IconBlock       DCD     -1
  113.                 DCD     0
  114.                 DCD     0
  115.                 DCD     68
  116.                 DCD     68
  117.                 DCD     &311A
  118.                 DCD     SpriteName
  119.                 DCD     1
  120.                 DCD     5
  121.  
  122. SpriteName      DCB     "!twin", 0
  123.  
  124.  
  125. ; --------------------------------------------------------------
  126.  
  127.  
  128. PollLoop        ADRL    r1, Buffer
  129.                 LDR     r0, =&1933
  130.                 SWI     Wimp_Poll
  131.  
  132.                 CMP     r0, #2
  133.                 SWIEQ   Wimp_OpenWindow
  134.                 BEQ     PollLoop
  135.  
  136.                 CMP     r0, #3
  137.                 SWIEQ   Wimp_CloseWindow
  138.                 BEQ     PollLoop
  139.  
  140.                 CMP     r0, #6
  141.                 BEQ     MouseClick
  142.  
  143.                 CMP     r0, #9
  144.                 BEQ     MenuSelect
  145.  
  146.                 CMP     r0, #17
  147.                 CMPNE   r0, #18
  148.                 BNE     PollLoop
  149.  
  150.  
  151. ; --------------------------------------------------------------
  152.  
  153.  
  154.                 LDR     r0, [r1, #16]           ; get message type
  155.  
  156.                 CMP     r0, #0
  157.                 MOVEQ   pc, lr
  158.  
  159.                 CMP     r0, #3
  160.                 BEQ     DataLoad
  161.  
  162.                 CMP     r0, #1
  163.                 BEQ     DataSave
  164.  
  165.                 CMP     r0, #5
  166.                 BEQ     DataOpen
  167.  
  168.                 B       PollLoop
  169.  
  170.  
  171. ; --------------------------------------------------------------
  172.  
  173.  
  174. DataLoad        LDR     r2, [r1, #4]            ; sender's task
  175.                 LDR     r0, [r1, #8]            ; fill in your_ref
  176.                 STR     r0, [r1, #12]
  177.                 MOV     r0, #4                  ; DataLoad_Ack
  178.                 STR     r0, [r1, #16]
  179.                 MOV     r0, #17
  180.  
  181.                 SWI     Wimp_SendMessage        ; Ack
  182.  
  183.                 LDR     r0, TwinCommand
  184.                 STR     r0, Buffer
  185.                 MOV     r0, #" "
  186.                 STRB    r0, Buffer+4
  187.  
  188.                 ADD     r3, r1, #44
  189.                 ADRL    r4, Buffer+5
  190.  
  191. Copy1           LDRB    r0, [r3]
  192.                 STRB    r0, [r4]
  193.                 ADD     r3, r3, #1
  194.                 ADD     r4, r4, #1
  195.                 CMP     r0, #32
  196.                 BGE     Copy1
  197.  
  198.                 ADRL    r0, Buffer
  199.                 SWI     Wimp_StartTask
  200.  
  201.                 ADR     r0, RemoveScrap
  202.                 SWI     X+OS_CLI
  203.  
  204.                 B       PollLoop
  205.  
  206. TwinCommand     DCB     "Twin"
  207.  
  208. RemoveScrap     DCB     "Remove <Wimp$Scrap>", 0
  209.  
  210.  
  211. ; --------------------------------------------------------------
  212.  
  213.  
  214. DataOpen        LDR     r0, [r1, #40]
  215.                 LDR     r2, =TextFile
  216.                 CMP     r0, r2
  217.                 BEQ     DataLoad
  218.                 B       PollLoop
  219.  
  220.  
  221. ; --------------------------------------------------------------
  222.  
  223.  
  224. DataSave        LDR     r2, [r1, #4]
  225.                 LDR     r0, [r1, #8]            ; fill in your_ref
  226.                 STR     r0, [r1, #12]
  227.                 MOV     r0, #2                  ; DataSave_Ack
  228.                 STR     r0, [r1, #16]
  229.                 MOV     r0, #60                 ; New block size
  230.                 STR     r0, [r1, #0]
  231.  
  232.                 ADR     r3, ScrapFile           ; copy scrapfile name across
  233.                 MOV     r4, #44
  234. Copy2           LDRB    r0, [r3, #0]
  235.                 STRB    r0, [r1, r4]
  236.                 ADD     r3, r3, #1
  237.                 ADD     r4, r4, #1
  238.                 CMP     r0, #0
  239.                 BNE     Copy2
  240.  
  241.                 MOV     r0, #17
  242.                 SWI     Wimp_SendMessage
  243.                 B       PollLoop
  244.  
  245. ScrapFile       DCB     "<Wimp$Scrap>", 0, 0, 0, 0, 0, 0
  246.  
  247.  
  248. ; --------------------------------------------------------------
  249.  
  250.  
  251. MouseClick      LDR     r0, [r1, #8]
  252.                 CMP     r0, #2
  253.                 BNE     FileLess
  254.  
  255.                 LDR     r2, [r1, #0]            ; Must be menu on our icon
  256.                 ADR     r1, MenuBlock
  257.                 SUB     r2, r2, #HalfWidth
  258.                 MOV     r3, #95+2*44
  259.                 SWI     Wimp_CreateMenu
  260.  
  261.                 B       PollLoop
  262.  
  263. MenuBlock       DCB     "Twin"
  264.                 DCD     0, 0
  265.                 DCB     7, 2, 7, 0
  266.                 DCD     HalfWidth*2, 44, 0
  267.  
  268.                 DCD     0
  269. WindowHandle    DCD     0
  270.                 DCD     &7000021
  271.                 DCB     "Info"
  272.                 DCD     0
  273.                 DCD     0
  274.  
  275.                 DCD     &80
  276.                 DCD     -1
  277.                 DCD     &7000021
  278.                 DCB     "Quit", 0
  279.  
  280. ; --------------------------------------------------------------
  281.  
  282. FileLess        LDR     r0, TwinCommand
  283.                 STR     r0, Buffer
  284.                 MOV     r0, #13
  285.                 STRB    r0, Buffer+4
  286.                 ADRL    r0, Buffer
  287.                 SWI     Wimp_StartTask
  288.                 B       PollLoop
  289.  
  290.  
  291. ; --------------------------------------------------------------
  292.  
  293.  
  294. MenuSelect      LDR     r0, [r1, #0]
  295.                 CMP     r0, #1
  296.                 BNE     PollLoop
  297.                 MOV     pc, lr
  298.  
  299.  
  300. ; --------------------------------------------------------------
  301.  
  302.  
  303. BreakPoint      STMEA   sp!, {r0-r2, lr}
  304.                 ADR     r0, BreakErr
  305.                 MOV     r1, #0
  306.                 ADR     r2, BreakName
  307.                 SWI     Wimp_ReportError
  308.                 LDMEA   sp!, {r0-r2, pc}
  309.  
  310. BreakErr        DCB     "    Halted", 0
  311.  
  312. BreakName       DCB     "BreakPoint", 0
  313.  
  314. ProgramEnd
  315.                 END
  316.